symbolic differentiation